【X68000(Z)アセンブラ講座 第031回 テキストプレーン複数同時アクセス】   お久しぶりです!! 今回はテキストプレーン複数同時アクセスについて解説します。 今回もまた簡単に理解できると思います。 破線の内側を'TX_MPPUT.s'と言うファイル名で保存して下さい。 ------------------------------------------------------------------------------------------------ ******************************************************************************** * * アプリ名 : TX_MPPUT.x * * テキスト複数プレーン同時アクセス * * Ver1.00 * ******************************************************************************** .cpu 68000 include A:\XC\INCLUDE\DOSCALL.MAC include A:\XC\INCLUDE\IOCSCALL.MAC cg_palette equ $E82000 * CG用パレットデータの先頭アドレス cg_buffer equ $C00000 * CG-VRAMの先頭アドレス cg_scroll_x equ $E80018 * CGスクロール X cg_scroll_y equ $E8001a * CGスクロール Y sp_palette equ $E82200 * スプライト用パレットデータの先頭アドレス sp_pattern equ $EB8000 * スプライトパターンデータの先頭アドレス sp_controll equ $EB0000 * スプライトスクロールレジスターの先頭アドレス vsync equ $E88001 * %00010000でV-Syncチェックする pad1 equ $E9A001 * ゲームパッド1 pad2 equ $E9A003 * ゲームパッド2 gpip equ $E88001 crtc_r21 equ $E8002A * CRTC R21 crtc_mode equ $E80480 .data msg01: dc.b 'ESCキーを押すと終了します。',13,10,0 .even * %GGGGG_RRRRR_BBBBB_A テキストパレットデータ txpal: dc.w %00000_00000_00000_1 dc.w %00000_00000_11111_1 dc.w %00000_11111_00000_1 dc.w %11111_00000_00000_1 dc.w %11111_00000_11111_1 dc.w %11111_11111_00000_1 dc.w %00000_11111_11111_1 dc.w %01111_01111_01111_1 dc.w %00111_00111_00111_1 dc.w %00000_00000_01111_1 dc.w %00000_01111_00000_1 dc.w %01111_00000_00000_1 dc.w %01111_00000_01111_1 dc.w %01111_01111_00000_1 dc.w %00000_01111_01111_1 dc.w %11111_11111_11111_1 .bss txpal_backup: ds.w 16 * テキストパレットのバックアップ .text start: * ユーザーモードからスーパーバイザーモードに切り替え moveq.l #_B_SUPER,d0 movea.l #0,a1 trap #15 * 画面モードの設定 moveq.l #_CRTMOD,d0 * 画面モードの設定 move.w #12,d1 * 画面モードの番号 : 16 = 768x512x4bit / 12 = 512x512x16bit trap #15 * 画面をクリアして表示をオンにする moveq.l #_G_CLR_ON,d0 * 画面をクリアして表示をオンにする trap #15 bsr set_text_palette * テキスト複数プレーン同時アクセス設定 moveq.l #%1111,d0 * 注@ / テキストカラー番号(0-15の任意の色番号) lsl.w #4,d0 or.w #%00000001_0000_0000,d0 * move.w #%0000000S_ZZZZ_0000,crtc_r21 * S=1の時複数同時オン / zzzz=テキストカラー番号 move.w d0,crtc_r21 * 設定を反映させる bsr draw_text pea msg01 dc.w _PRINT addq.l #4,sp * ESCキーが押されるまで待つ key_esc: moveq.l #_BITSNS,d0 moveq.l #0,d1 trap #15 and.b #%00000010,d0 tst.b d0 beq key_esc bsr restore_text_palette bsr clear_text move.w #%00000000_0000_0000,crtc_r21 * 複数同時オフ * 画面モードの設定 moveq.l #_CRTMOD,d0 * 画面モードの設定 move.w #16,d1 * 画面モードの番号 : 16 = 768x512x4bit / 12 = 512x512x16bit trap #15 * プログラム終了 dc.w _EXIT * テキストVRAM塗り潰し draw_text: movea.l #$E00000,a0 move.w #511,d7 moveq.l #$FFFFFFFF,d0 draw_text_1: move.l a0,a1 moveq.l #64/4-1,d6 * d0 = ((512px/8)-1) draw_text_2: move.l d0,(a1)+ dbpl d6,draw_text_2 adda.l #128,a0 dbpl d7,draw_text_1 rts * テキストVRAM高速クリアー clear_text: move.w #%00000001_1111_0000,crtc_r21 * 複数同時オン movea.l #$E00000,a0 moveq.l #0,d7 moveq.l #0,d0 clear_text_1: move.l d0,(a0)+ cmp.l #$E20000,a0 blt clear_text_1 rts * テキストパレットのバックアップと設定 set_text_palette: lea txpal,a0 lea sp_palette,a1 lea txpal_backup,a2 moveq #0,d7 set_text_palette_1: move.w (a1),(a2)+ move.w (a0)+,(a1)+ addq.w #1,d7 cmp.w #16,d7 blt set_text_palette_1 rts * テキストパレットの復旧 restore_text_palette: lea txpal_backup,a0 lea sp_palette,a1 moveq #0,d7 restore_text_palette_1: move.w (a0)+,(a1)+ addq.l #1,d7 cmp.w #16,d7 blt restore_text_palette_1 rts * [EOF] ------------------------------------------------------------------------------------------------ ファイルの保存が終わったらコマンドプロンプトから、 A>AS TX_MPPUT.s [Enter] A>LK TX_MPPUT.o [Enter} A>TX_MPPUT.x [Enter] 以上(↑)のように入力するとプログラムが起動します。 ソースコードのデフォルトでは4プレーン全てのビットが1なので 全てのプレーンが同時アクセスの対象となるので カラー番号15番の白でテキスト画面が塗りつぶされます。 '注@'の行ではd0に'%1111'を入れて4プレーン同時にアクセスをしていますが その他の'%1101'など他のビットパターンに書き換えて他の色に変えてみて下さい。 今回の機能はテキストプレーン1つのアクセスで 高速にカラフルな文字列の表示などができます。 今回は以上です。 お疲れ様でした!! [EOF]